package org.egedede.simulation.model;

/**
 * A law is a process that is applied on a {@link Model} .
 * @author tiaped
 */
public interface Law {

	/**
	 * Applies law's definition on this model
	 * @param model the model on which is applied the law
	 * @throws IllegalArgumentException if the model is not of the law {@link ModelType}
	 */
	public void process(Model model) throws IllegalArgumentException;
	
	/**
	 * Returns {@link ModelType} of this law
	 * @return types
	 */
	public ModelType getType();

}
